package com.kinghood.productcenter.service.base;

import com.kinghood.productcenter.common.model.dao.base.BaseAttributeDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kinghood.infrastructure.model.dto.StatusReqDTO;
import com.kinghood.productcenter.common.model.dto.base.AttributeCodesReqDTO;
import com.kinghood.productcenter.common.model.dto.base.AttributeReqDTO;
import com.kinghood.productcenter.common.model.dto.base.GetAttributePageListReqDTO;
import com.kinghood.productcenter.common.model.dto.base.ListAttributeQueryDTO;
import com.kinghood.productcenter.common.model.vo.base.BaseAttributeVO;
import com.kinghood.productcenter.common.model.vo.base.GetAttributePageListVO;
import com.kinghood.sharding.model.PageResponseVO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 可选项属性 服务类
 * </p>
 *
 * @author KingHood
 * @since 2023-12-20
 */
public interface IBaseAttributeService extends IService<BaseAttributeDO> {

    /**
     * 获取全量属性
     *
     * @return 全量属性
     * @author zfj
     * @date 2023/12/25
     */
    List<BaseAttributeVO> getAllAttribute();

    /**
     * 新增修改属性
     *
     * @param dirReq dir红色
     * @author jp
     * @date 2023/12/26
     */
    void addorUpdateAttribute(AttributeReqDTO dirReq);

    /**
     * 更新品牌状态
     *
     * @param param 参数
     * @author jp
     * @date 2023/12/27
     */
    void updateAttributeStatus(StatusReqDTO param);

    /**
     * 根据id删除
     *
     * @param id id
     * @author jp
     * @date 2023/12/27
     */
    void delAttributeById(Long id);

    /**
     * 列表
     *
     * @param param 参数
     * @author jp
     * @date 2023/12/27
     */
    PageResponseVO listAttribute(ListAttributeQueryDTO param);

    /**
     * 下拉列分页数据
     *
     * @param param 条件
     * @return 分页数据
     * @author zfj
     * @date 2024/1/24
     */
    PageResponseVO<GetAttributePageListVO> getAttributePageList(GetAttributePageListReqDTO param);

    /**
     * 详情
     *
     * @param id id
     * @author jp
     * @date 2023/12/27
     */
    AttributeReqDTO detailAttribute(Long id);

    /**
     * 批量获取属性
     *
     * @param param 参数
     * @author jp
     * @date 2024/01/03
     */
    List<AttributeReqDTO> attributeByCodes(AttributeCodesReqDTO param);

    /**
     * 下载属性
     *
     * @param param    参数
     * @param response 回答
     * @author jp
     * @date 2024/01/04
     */
    void downloadAttribute(ListAttributeQueryDTO param, HttpServletResponse response);

    /**
     * 删除属性值检查
     *
     * @param valueId 值id
     * @return @return {@link Object }
     * @author jp
     * @date 2024/01/11 14:18
     */
    void checkAttributeValueUsed(Long valueId);

    /**
     * 根据code获取map
     *
     * @param realAttribute 实属性
     * @return @return {@link Map }<{@link String }, {@link String }>
     * @author jp
     * @date 2024/01/25 10:22
     */
    Map<String, String> getCodeNameMap(List<String> realAttribute);

    /**
     * 通过code获取属性id
     *
     * @param attributeCode
     * @return 属性id
     * @author zfj
     * @date 2024/1/22
     */
    List<Long> getAttributeIdList(List<String> attributeCode);

}
